Plug a leak and add a check that we have a toplevel before accessing it.
authorRichard Hult <richard@imendio.com>
Tue, 25 Mar 2008 13:35:20 +0000 (13:35 +0000)
committerRichard Hult <rhult@src.gnome.org>
Tue, 25 Mar 2008 13:35:20 +0000 (13:35 +0000)
2008-03-25  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkwindow-quartz.c:
(gdk_window_quartz_process_all_updates): Plug a leak and add a
check that we have a toplevel before accessing it.

svn path=/trunk/; revision=19933

ChangeLog
gdk/quartz/gdkwindow-quartz.c

index 866cffae92bfeeccec0e85bc89329e6ebb8056bc..5159ce7c0f4478074df7e450ea328f0ae364191e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-03-25  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkwindow-quartz.c:
+       (gdk_window_quartz_process_all_updates): Plug a leak and add a
+       check that we have a toplevel before accessing it.
+
 2008-03-24  Tor Lillqvist  <tml@novell.com>
 
        Bug 524151 - Dragging of 0-byte files results in an empty filename
index b72097e940413da78aaa1fd2187d4eaac8b64702..6aec5e1a4fa606f52a9b2b03a394a1df888af28f 100644 (file)
@@ -347,19 +347,24 @@ gdk_window_quartz_process_all_updates (void)
     {
       GdkWindow *window = tmp_list->data;
       GdkWindow *toplevel;
-      NSWindow *nswindow;
-      GdkWindowObject *private;
-      GdkWindowImplQuartz *impl;
 
+      /* Only flush each toplevel at most once. */
       toplevel = gdk_window_get_toplevel (window);
-      private = (GdkWindowObject *) toplevel;
-      impl = (GdkWindowImplQuartz *) private->impl;
-      nswindow = impl->toplevel;
-
-      if (nswindow && ![nswindow isFlushWindowDisabled]) 
+      if (toplevel)
         {
-          [nswindow disableFlushWindow];
-          nswindows = g_slist_prepend (nswindows, nswindow);
+          GdkWindowObject *private;
+          GdkWindowImplQuartz *impl;
+          NSWindow *nswindow;
+
+          private = (GdkWindowObject *) toplevel;
+          impl = (GdkWindowImplQuartz *) private->impl;
+          nswindow = impl->toplevel;
+
+          if (nswindow && ![nswindow isFlushWindowDisabled]) 
+            {
+              [nswindow disableFlushWindow];
+              nswindows = g_slist_prepend (nswindows, nswindow);
+            }
         }
 
       gdk_window_quartz_process_updates_internal (tmp_list->data);
@@ -368,14 +373,15 @@ gdk_window_quartz_process_all_updates (void)
       tmp_list = tmp_list->next;
     }
 
-  while (nswindows) 
+  tmp_list = nswindows;
+  while (tmp_list) 
     {
-      NSWindow *nswindow = nswindows->data;
+      NSWindow *nswindow = tmp_list->data;
 
       [nswindow enableFlushWindow];
       [nswindow flushWindow];
 
-      nswindows = nswindows->next;
+      tmp_list = tmp_list->next;
     }
                    
   GDK_QUARTZ_RELEASE_POOL;